Python OpenCV resize 圖片縮放

您所在的位置:网站首页 opencv resize 连续 Python OpenCV resize 圖片縮放

Python OpenCV resize 圖片縮放

#Python OpenCV resize 圖片縮放 | 来源: 网络整理| 查看: 265

本篇將介紹如何使用 Python 搭配 OpenCV 來 resize 縮放圖片,在寫 python 影像處理程式時常常會用到 opencv cv2.resize 圖片縮放的功能,接下來介紹怎麼使用 python 搭配 OpenCV 模組來進行圖片縮放 resize。

使用範例

以下 python 範例 ShengYu 是將 lena.jpg 讀取進來後,使用 opencv cv2.resize 進行縮放,從原本的512x512大小縮放成256x256 的大小。opencv-resize.py12345678#!/usr/bin/env python3# -*- coding: utf-8 -*-import cv2image = cv2.imread('lena.jpg')image = cv2.resize(image, (256, 256), interpolation=cv2.INTER_AREA)cv2.imshow('Result', image)cv2.waitKey(0)

結果如下圖所示:

參數說明

cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])

interpolation 說明 INTER_NEAREST 最近鄰插值 INTER_LINEAR 雙線性插值(預設) INTER_AREA 使用像素區域關係進行重採樣。它可能是圖像抽取的首選方法,因為它會產生無雲紋理(波紋)的結果。 但是當圖像縮放時,它類似於INTER_NEAREST方法。 INTER_CUBIC 4x4像素鄰域的雙三次插值 INTER_LANCZOS4 8x8像素鄰域的Lanczos插值

cv2.resize 參數的詳細細節請參考這裡

OpenCV cv2.resize 提供五種方式的結果比較

下面的例子將 cv2.resize 所提供的所有種類都使用看看,來互相比較之間的差異,我們先 resize 縮小成 400x400 的大小 來比較看看,例子中還使用了 matplotlib 的方式將有圖片一起呈現在同一個視窗內,關於 matplotlib 的使用可以看看這篇,其中 matplotlib 的 imshow 圖片是使用RGB排列方式,所以這邊我們將 opencv 的 BGR 排列作個轉換,這樣在 matplotlib 上顏色顯示才會正確。

opencv-resize.py12345678910111213141516171819202122232425262728293031#!/usr/bin/env python3# -*- coding: utf-8 -*-import cv2from matplotlib import pyplot as pltimage = cv2.imread('lena.jpg')img1 = cv2.resize(image, (400, 400), interpolation=cv2.INTER_NEAREST)img2 = cv2.resize(image, (400, 400), interpolation=cv2.INTER_LINEAR)img3 = cv2.resize(image, (400, 400), interpolation=cv2.INTER_AREA)img4 = cv2.resize(image, (400, 400), interpolation=cv2.INTER_CUBIC)img5 = cv2.resize(image, (400, 400), interpolation=cv2.INTER_LANCZOS4)# BGR 轉 RGBimg0_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)img1_rgb = cv2.cvtColor(img1, cv2.COLOR_BGR2RGB)img2_rgb = cv2.cvtColor(img2, cv2.COLOR_BGR2RGB)img3_rgb = cv2.cvtColor(img3, cv2.COLOR_BGR2RGB)img4_rgb = cv2.cvtColor(img4, cv2.COLOR_BGR2RGB)img5_rgb = cv2.cvtColor(img5, cv2.COLOR_BGR2RGB)# 或這樣轉也可以#img1_rgb = img1[:,:,::-1]titles = ['Original Image', 'INTER_NEAREST', 'INTER_LINEAR', 'INTER_AREA', 'INTER_CUBIC', 'INTER_LANCZOS4']images = [img0_rgb, img1_rgb, img2_rgb, img3_rgb, img4_rgb, img5_rgb]for i in range(6): plt.subplot(2, 3, i+1) plt.imshow(images[i]) plt.title(titles[i]) plt.xticks([]), plt.yticks([])plt.show()

結果如下圖所示,從下列結果圖發現,使用 INTER_NEAREST 會有些微地鋸齒狀,在圖片中的帽緣與鏡子邊緣上的線條可以發現,INTER_NEAREST 是最簡單的插值方法,且速度快,但也容易出現鋸齒的現象。

OpenCV cv2.resize 這五種方式在速度上的比較

由快到慢排序:INTER_NEAREST > INTER_CUBIC > INTER_LINEAR > INTER_AREA > INTER_LANCZOS4這是以我的電腦的測試數據,每次跑的結果都不太一樣,但整體速度排序來說差不多,12345INTER_NEAREST: 0.000447 secondsINTER_LINEAR: 0.000673 secondsINTER_AREA: 0.001684 secondsINTER_CUBIC: 0.000482 secondsINTER_LANCZOS4: 0.003038 seconds

總結

如果是要縮小圖片的話,通常 INTER_AREA 使用效果較佳。如果是要放大圖片的話,通常 INTER_CUBIC 使用效果較佳,次等則是 INTER_LINEAR。如果要追求速度的話,通常使用 INTER_NEAREST。

其它參考opencv: 图像缩放(cv2.resize)_人工智能JNing-CSDN博客https://blog.csdn.net/JNingWei/article/details/78218837Python-OpenCV中的resize()函数 - Rogn - 博客园https://www.cnblogs.com/lfri/p/10596530.htmlOpenCV圖像縮放resize各種插值方式的比較人工智能_pan_jinquan的博客-CSDN博客https://blog.csdn.net/guyuealian/article/details/85097633

其它相關文章推薦如果你在學習 Python 或 OpenCV 影像處理相關技術,可以參考看看下面的文章,Python OpenCV 彩色轉灰階(RGB/BGR to GRAY)Python OpenCV 彩色轉HSV(RGB/BGR to HSV)Python OpenCV 彩色轉YCbCr(RGB/BGR to YCbCr)Python OpenCV 影像邊緣偵測 Canny Edge DetectionPython OpenCV 顯示camera攝影機串流影像Python OpenCV 垂直vconcat 和水平hconcat 影像拼接Python 旋轉圖片 rotatePython 圖片模糊化 blurPython 新手入門教學懶人包小專案 Python OpenCV 圖片轉字元圖畫



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3